package com.xframe.xdal.core.model.mapping;

import lombok.Data;
/**
 * 基础的数据库引用关系对象
 *
 * @author xufeng
 * @version 1.0
 * @date 2022-09-19
 */
@Data
public abstract class BaseRelation implements IRelation {

    /**
     * 属于那个类型
     */
    protected String typeName;
    /**
     * 外键属性名称 当前类的字段名称
     */
    protected String foreignKey;
    /**
     * 关联的对象的属性名称
     */
    protected String targetKey;
    /**
     * 别名
     */
    protected String as;
    /**
     * 附加的连接字符串
     */
    protected String refTableAddString;

    /**
     * 子表的被填充属性名称
     */
    protected String refName;


    private Class<?> dataType = null;
    private ITableInfo refTableInfo = null;
    @Override
    public Class<?> getDataType(){
        if(dataType == null){
            try{
                dataType = Class.forName(this.typeName);
            }catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return dataType;
    }

    @Override
    public ITableInfo getTableInfoByType(){
        if(refTableInfo == null){
            refTableInfo = TableInfoBuilder.BuildTableInfoByAnnotation(getDataType());
        }
        return refTableInfo;
    }
}
